package com;

/**
 * 写一个死锁
 *
 * 排除故障 ，除了看错误信息之外，还可以用jps -l 命令  锁定到错误信息对应资源号   排查到错误位置
 * 然后用 jstack（打印错误信息） 加上如上资源号 ，可以拍查到具体错误原因
 */
public class DeadLock {
    public static void main(String[] args) {
        String lockA = "1";
        String lockB = "2";
        new Thread(new Dead(lockA,lockB), "Aaaa").start();
        new Thread(new Dead(lockB,lockA), "Bbbb").start();

    }
}


class Dead implements Runnable{
    String lockA;
    String lockB;

    public Dead(String lockA, String lockB) {
        this.lockA = lockA;
        this.lockB = lockB;
    }

    @Override
    public void run() {
        synchronized (lockA){
            System.out.println(Thread.currentThread().getName() + "当前线程持有" + lockA + "并且在尝试获取" + lockB);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (lockB){
                System.out.println(Thread.currentThread().getName() + "当前线程持有" + lockB + "并且在尝试获取" + lockA);
            }
        }
    }
}